package com.xh3140.android.widget.dialog.params;


import android.content.Context;
import android.view.Gravity;

import androidx.annotation.ColorInt;
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.Px;
import androidx.annotation.Size;
import androidx.annotation.StyleRes;
import androidx.appcompat.widget.LinearLayoutCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;

import com.xh3140.android.widget.dialog.values.ColorRes;
import com.xh3140.android.widget.dialog.values.DimenRes;

/**
 * 对话框配置属性
 * 每一个属性都有默认的设定值
 * 在创建对话框时这些属性可以自定义修改
 */
public final class DialogParams extends AbstractParams {
    /**
     * 位置
     * 这个位置是相对于应用窗口的
     */
    public int gravity = Gravity.CENTER;

    /**
     * 背景是否昏暗
     * true 背景昏暗
     * false 背景不昏暗
     */
    public boolean isDimEnabled = true;

    /**
     * 返回键是否关闭
     * true 表示按下应用返回键时会触发关闭
     * false 表示按下应用返回键时不会触发关闭
     */
    public boolean cancelable = true;

    /**
     * 是否点击外部关闭
     * true 表示点击外部时会触发关闭
     * false 表示点击外部时不会触发关闭
     */
    public boolean canceledOnTouchOutside = true;

    /**
     * 透明度，范围：0-255；255不透明
     * 范围：0 - 255
     * 值越小表示越透明
     * 0x00 完全透明
     * 0xFF 完全不透明
     */
    @IntRange(from = 0x00, to = 0xFF)
    public int alpha = 0xFF;

    /**
     * 宽度
     * 在0-1范围内：表示的是宽度相对窗口宽度所占的百分比
     * 大于1时：表示宽度的真实像素值
     */
    public float width = DimenRes.DIALOG_WIDTH;

    /**
     * 最大高度
     * 在0-1范围内：表示的是最大高度相对窗口高度所占的百分比
     * 大于1时：表示最大高度的真实像素值
     * 当的实际高度大于这个高度时，会被限制在这个高度值
     */
    public float maxHeight = DimenRes.DIALOG_MAX_HEIGHT;

    /**
     * 窗口动画资源ID
     */
    @StyleRes
    public int windowAnimations = 0;

    /**
     * 背景颜色 argb
     */
    @ColorInt
    public int backgroundColor = ColorRes.DIALOG_BACKGROUND_COLOR;

    /**
     * 分割线显示方式
     * 如果这个值小于0，分割线只会在适当的时候显示在按钮上方
     */
    public int showDividers = LinearLayoutCompat.SHOW_DIVIDER_MIDDLE;

    /**
     * 分割线颜色 argb
     */
    @ColorInt
    public int dividerColor = ColorRes.DIALOG_DIVIDER_COLOR;

    /**
     * 分割线厚度 px
     */
    @Px
    public int dividerThickness = dp2px(DimenRes.DIALOG_DIVIDER_THICKNESS);

    /**
     * 外边距
     * 格式：[start, top, end, bottom] px
     */
    @Nullable
    @Size(4)
    public int[] margins = null;

    /**
     * 圆角半径 px
     */
    @Px
    public int radius = dp2px(DimenRes.DIALOG_RADIUS);

    /**
     * X坐标偏移 px
     */
    @Px
    public int offsetX = 0;

    /**
     * Y坐标偏移 px
     */
    @Px
    public int offsetY = 0;

    @Nullable
    public final FragmentManager manager;

    public DialogParams(@NonNull Context context) {
        super(context);
        manager = null;
    }

    public DialogParams(@NonNull FragmentActivity activity) {
        super(activity.getApplicationContext());
        manager = activity.getSupportFragmentManager();
    }

    public DialogParams(@NonNull Fragment fragment) {
        super(fragment.requireContext());
        manager = fragment.getParentFragmentManager();
    }
}